package Generic;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 王艺锡
 * @version 1.0
 */
@SuppressWarnings({"all"})
public class GenericExtends {
    public static void main(String[] args) {
        List<Object> list1 = new ArrayList<>();
        List<String> list2 = new ArrayList<>();
        List<Aa> list3 = new ArrayList<>();
        List<Bb> list4 = new ArrayList<>();
        List<Cc> list5 = new ArrayList<>();

        f1(list1);
        f1(list2);
        f1(list3);
        f1(list4);
        f1(list5);

       // f2(list1);//err
       // f2(list2);//err
        f2(list3);
        f2(list4);
        f2(list5);

        f3(list1);
        //f3(list2);//err
        f3(list3);
        //f3(list4);//err
        //f3(list5);//err

    }

    //这里的?表示可以接受任意泛型
    public static void f1(List<?> l) {
    }

    //这里的<? extends Aa>表示可以接受Aa类和Aa类的子类
    public static void f2(List<? extends Aa> l) {
    }

    //这里的<? super Aa>表示可以接收Aa类和Aa类的父类，不限于直接父类
    public static void f3(List<? super Aa> l) {
    }
}

class Aa {
}

class Bb extends Aa {
}

class Cc extends Bb {
}
